home *** CD-ROM | disk | FTP | other *** search
/ DS-CD ROM 2 1993 August / DS CD-ROM 2.Ausgabe (August 1993).iso / programm / ds0334 / sim51_04.arj / OMF51.DOC < prev    next >
Text File  |  1993-02-01  |  18KB  |  487 lines

  1. OMF51   :   Intel Objekt-Modul-Format für 8051 Code:
  2. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3. Dieser Text  enthät eine Beschreibung des  Intel Objekt Modul Formats  beim
  4. MCS51-Assembler ASM51, soweit er  mir bekannt ist. Der  Inhalt ist ohne Ge-
  5. währ für Richtigkeit und Vollständigkeit. Hingegen bin ich für Hinweiße auf
  6. Fehler und Ergänzungen dankbar:  Werner Hennig-Roleff, Sulzgrieser Str. 101
  7. 73733 Esslingen, 0711/376718.
  8.  
  9. Laut telefonischer Auskunft von Intel (München) gab es vor Jahren eine Dok-
  10. umentation von  Intel zum OMF,  jetzt aber  nichts mehr.  Laut Auskunft von
  11. einem Mitarbeiter von Hitex (entwickelt 8051-Emulatoren)  wäre der  OMF von
  12. Intel nicht veröffentlicht worden. Sie hätten den Code auch erst selbst ent-
  13. schlüsseln müssen.
  14.  
  15. Das Objekt-Modul-Format OMF51 wird bei 8051 Entwicklungsumgebungen  verwen-
  16. det vom
  17.  Assembler          (ASM51 von Intel / A51 von Keil) für Objekt-File Output
  18.  C-Compiler         (C51 von Keil) für Objekt-File Output
  19.  Libary Manager     (LIB51 von Intel oder Keil) für Libery-File
  20.  Linker und Locator (RL51 von Intel / L51 von Keil) für Absolut-File Output
  21.  Emulatoren        (von Hitex und Intel ICE51)
  22.  Simulatoren        (natürlich SIM51 !!!)
  23.  
  24. Objekt- und Libary-Files enthalten Code, der noch keiner festen Codeadresse
  25. zugeordnet  sein  muß  (relocateable Segmente).  In Absolut-Files ist jedes
  26. Code-Byte einer festen Adresse zugeordnet.  Adressangaben in  Absolut-Files
  27. sind  absolute  Werte.  In  Objekt- und Libary-Files sind Adressangaben nur
  28. Offsetwerte bezüglich des Segmentstarts.
  29.  
  30. Ein Absolut- sowie ein Objektfile ist aus einer Aneinanderreihung  von  Re-
  31. cords  definiert.  Jedes Record schließt sich direkt an das vorige an.  Sie
  32. besitzen folgenden prinzipiellen Aufbau:
  33.  
  34.         ┌─────┬──────────┬────────────────────┬─────┐
  35.         │ Typ │  Length  │   ...  body  ...   │ CHK │
  36.         └─────┴──────────┴────────────────────┴─────┘
  37.         (Byte)   (Word)       (n - Bytes)      (Byte)
  38.  
  39. Length    gibt die Länge des Records in Bytesanzahl an.  Der Wert wird  aus
  40.      der   Bytesanzahl   des  Record-body's  und  der  Checksumme  gebildet
  41.      (Length = n+1).  An erster Position steht  das  Low-Byte,  danach  das
  42.      High-Byte.  Es können so maximal 0FFFBh Code-Bytes in einen Record ge-
  43.      schrieben werden (siehe Typ 06).  Programme wie  OH.EXE  (Absolut-  zu
  44.      Hex-File Konverter) bearbeiten jedoch nur Records mit bis zu ca.  500h
  45.      Code-Bytes.
  46.  
  47. Der Aufbau des Record-body's ist je nach Record-Typ verschieden.
  48.  
  49. CHK  wird gebildet aus: die Quersumme über alle Bytes des Records außer CHK
  50.      selbst.  Davon das Zweierkomplement,  wobei anschließend das high Byte
  51.      vernachlässigt wird. (Zweierkomplement durch NEG AX beim 8086).
  52.  
  53. Der  oben definierte Aufbau eines Records wird bei vielen Compilern zur Er-
  54. stellung von Objekt-Files verwendet. Die Objekt-Files von Compiler für ver-
  55. schiedene CPU's unterscheiden sich im für sie definierten Satz von gültigen
  56. Record-Typen. Im folgenden werden die für den 8051 Assembler und C-Compiler
  57. definierten Record-Typen beschrieben (soweit bekannt und ohne Garantie).
  58.  
  59.                                      1
  60.  
  61. ** Modul-Start:
  62. ---------------
  63. Dieser Record definiert den Modul-Namen und steht am  Anfang  von  Absolut-
  64. und Objekt-Files.
  65.         ┌────┬────────┬────┬──────────────┬────────┬────┐
  66.         │ 02 │ Length │NaL │  .. Name ..  │   ?    │CHK │
  67.         └────┴────────┴────┴──────────────┴────────┴────┘
  68.  
  69. In NaL steht die Länge des folgenden Namens (Byteanzahl).
  70. In den dem Namen folgenden Word (?) steht meißt
  71.       00FF bei einem Absolut-File (RL51-Output) oder
  72.       00FD bei einem Objekt-File (ASM51-Output) oder
  73.       01FE bei einem C-Compiler-Objekt-File.
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80. ** Modul-End:
  81. -------------
  82. Dieser Record steht am Ende von Absolut-, Objekt- und Libary-Files.
  83.         ┌────┬────────┬────┬──────────────┬────────┬────┬────┬────┐
  84.         │ 04 │ Length │NaL │  .. Name ..  │   ?    │RegB│ ?  │CHK │
  85.         └────┴────────┴────┴──────────────┴────────┴────┴────┴────┘
  86.  
  87. In NaL steht die Länge des folgenden Namens (Byteanzahl).
  88.  
  89. Im Feld RegB sind die verwendeten Register-Banks gekennzeichnet: das lowest
  90. Bit kennzeichnet Registerbank 0 das nächste RegBnk 1,  usw. Steht eine 1 in
  91. diesem Bit, so ist die Registerbank selektiert (USING Direktrive).
  92.  
  93.    Beispiel:  0001b selektiert nur RegBnk 0
  94.               1001b selektiert RegBnk 0 und 3
  95.  
  96. In dem mit ? gekennzeichneten BYTE steht meißt 00.
  97. In den dem Namen folgenden WORD steht meißt  0000.
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104. ** Hex-Code:
  105. ------------
  106.         ┌────┬────────┬────┬────────┬───────────────┬────┐
  107.         │ 06 │ Length │SNr │  Adr   │  .... c ....  │CHK │
  108.         └────┴────────┴────┴────────┴───────────────┴────┘
  109.  
  110. Im mit ... c ... gekennzeichneten Feld steht der Hex-Code (mehrere Byte).
  111.  
  112. Im Feld Adr (Word: low Byte zuerst) ist die Adresse des ersten Codebytes in
  113. diesem Record angegeben.
  114.  
  115. SNr enthält die Segment-Nummer zu dem dieser Code gehört (siehe Typ 0E).
  116.  
  117.  
  118.  
  119.  
  120.                                      2
  121.  
  122. ** Debug-Info Heater:
  123. ---------------------
  124.         ┌────┬────────┬────┬────┬──────────────┬────┐
  125.         │ 10 │ Length │ K  │NaL │  .. Name ..  │CHK │
  126.         └────┴────────┴────┴────┴──────────────┴────┘
  127.  
  128. War bei der Assemblierung die Option Debug gewählt,  so geht  jeder  Gruppe
  129. von Records ein Heater vorraus. Der Heater gibt den Modul-Namen bekannt, zu
  130. dem  die folgenden Records gehören.  Beim C51 gibt es auch Heater mit Funk-
  131. tiuonsnamen.
  132.  
  133. In dem mit K gekennzeichneten Feld steht meißt
  134.         00    wenn globale Symbol-Definitionen folgen
  135.         03    wenn globaler Code folgt
  136.         02    wenn lokale Symbol-Definitionen folgen
  137.         05    wenn lokaler Code folgt
  138.  
  139. Die Unterscheidung in K = 02 oder 05 wurde nur beim C-Compiler  beobachtet.
  140. Beim Assembler wurde nur K = 00 oder 03 beobachtet. K = 01 trat nur bei er-
  141. weiterten OMF51 auf.
  142.  
  143.  
  144. Üblicherweise hat ein Objekt-File folgenden Aufbau:
  145.      02     Modulstart
  146.      0E     Segmentdefinitionen
  147.      18     EXTRN-Definitionen
  148.      16     PUBLIC-Definitionen
  149.      10     Heater für Symbolnamen
  150.      12     Symbolnamen
  151.      10     Heater für Code
  152.      06     Code
  153.      08     Relocation-Informationen
  154.      12     Zeilenzuordnungen
  155.      04     Modul-Ende
  156.  
  157. Verschiedene  Records  können  auch  mehrfach  vorhanden  sein.  Bei  einem
  158. Absolut-File entfallen die Typen 0E, 18, 16,  08.  Obwohl Zeilenzuordnungen
  159. vom Typ 12 sind kommen sie unter dem Code-Heater.
  160.  
  161.  
  162.  
  163.  
  164. ** Debug-Info (Symbol-Definition):
  165. ----------------------------------
  166. Ein Record kann Definitionen für mehrere Variablen beinhalten. Der mittlere
  167. Teil wiederholt sich dann.
  168.  ┌────┬────────┬────┐ ┌────┬────┬────────┬────┬────┬──────────────┐
  169.  │ 12 │ Length │S/V │ │SNr │ T  │  Wert  │ ?  │NaL │  .. Name ..  │
  170.  └────┴────────┴────┘ └────┴────┴────────┴────┴────┴──────────────┘
  171.                       :                                           :
  172.                       ┌────┬────┬────────┬────┬────┬──────────────┐ ┌────┐
  173.                       │SHr │ T  │  Wert  │ ?  │NaL │  .. Name ..  │ │CHK │
  174.                       └────┴────┴────────┴────┴────┴──────────────┘ └────┘
  175.  
  176. S/V gibt an, ob die folgende Zuordnung sich auf einen Segmentnamen oder ei-
  177. ne Variable bezieht.  Jedem Segmentnamen ist auch ein Wert zugeordnet, näm-
  178. lich der Wert der ersten Variable/Adresse  in  dem  Segment.  Achtung:  Ist
  179. S/V = 03, so enthält der Record Zeilezuordnungen (siehe unten).
  180.  
  181.                                      3
  182.  
  183.      S/V = 00  Variablen-Namen folgen
  184.      S/V = 01  public deklarierte Variablen-Namen folgen
  185.      S/V = 02  Segment-Namen folgen
  186.      S/V = 03  Adress-Zeile Zuordnungen folgen
  187.                (Achtung! anderer Record-Body!!  - siehe unten!)
  188.  
  189. SNr  enthält  die  Segment-Nummer  zu  dem  dieser Definition gehört (siehe
  190. Typ 0E).
  191.  
  192. T gibt den Typ an:    00 = CODE
  193.                       01 = XDATA
  194.                       02 = DATA
  195.                       03 = IDATA
  196.                       04 = BIT
  197.                       05 = NUMBER (EQU)
  198.  
  199. Wert (Word: low Byte zuerst) gibt die Adresse der Variablen bzw.  den  Wert
  200. an.  Der Wert ist immer als WORD abgelegt,  auch wenn es sich um eine DATA-
  201. Adresse handelt.
  202.  
  203.  
  204.  
  205. ** Debug-Info (Zeilenzuordnung):
  206. --------------------------------
  207.      ┌────┬────────┬────┐ ┌────┬────────┬────────┐
  208.      │ 12 │ Length │ 03 │ │SNr │ Adresse│ Zeile  │
  209.      └────┴────────┴────┘ └────┴────────┴────────┘
  210.                           :                      :
  211.                           ┌────┬────────┬────────┐ ┌────┐
  212.                           │SHr │ Adresse│ Zeile  │ │CHK │
  213.                           └────┴────────┴────────┘ └────┘
  214.  
  215. SNr enthält die Segment-Nummer  zu  dem  dieser  Definition  gehört  (siehe
  216. Typ 0E).
  217.  
  218. Adresse und Zeile sind jeweils als WORD abgelegt.
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225. ** Segment-Namen:
  226. -----------------
  227. ┌────┬────────┐ ┌────┬───┬──────┬──────┬──────┬─────┬────────────┐
  228. │ 0E │ Length │ │ Nr │ T │  ?   │Start │ Size │ NaL │ .. Name .. │
  229. └────┴────────┘ └────┴───┴──────┴──────┴──────┴─────┴────────────┘
  230.                 :                                                :
  231.                 ┌────┬───┬──────┬──────┬──────┬─────┬────────────┐ ┌─────┐
  232.                 │ Nr │ T │  ?   │Start │ Size │ NaL │ .. Name .. │ │ CHK │
  233.                 └────┴───┴──────┴──────┴──────┴─────┴────────────┘ └─────┘
  234.  
  235. Nr  (Byte)  beinhaltet eine laufende Nummer der Segment-Namen Definitionen.
  236. Das erste relocateable Segment erhält die Nummer 1 usw. Alle festen Segmen-
  237. te (CSEG, DSEG, ...) erhalten hier die Nummer 0. Die Anzahl der definierba-
  238. ren relocateablen Segmente ist begrenzt (1 bis 255).  Beim Hochzählen  wird
  239. nicht nach Typen unterschieden.
  240.  
  241.  
  242.                                      4
  243.  
  244. T (Byte) gibt den Sgment-Typ an:   00 = CODE
  245.                                    01 = XDATA
  246.                                    02 = DATA
  247.                                    03 = IDATA
  248.                                    04 = BIT
  249.  
  250. Start  (WORD)  gibt  die Adresse des ersten Eintrags in dieses Segments an.
  251. Bei relocatablen Segmenten ist dies ein Offset-Wert (= 0000, denn jedes Re-
  252. locateable Segment beginnt mit Offset 0000).
  253.  
  254. Size (WORD) gibt die Anzahl der in diesem Segment enthaltenen Bytes an.
  255.  
  256. Bei festen Segmenten ist die Namenlänge (NaL) 0.
  257.  
  258. In den mit ? (WORD) markierten Feld steht meißt
  259.           0000   bei festen Segmenten
  260.           0001   bei relocateablen Segmenten
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267. ** EXTRN Deklaration:
  268. ---------------------
  269.     ┌────┬────────┐ ┌───┬────┬───┬───┬─────┬────────────┐
  270.     │ 18 │ Length │ │ ? │ Nr │ T │ ? │ NaL │ .. Name .. │
  271.     └────┴────────┘ └───┴────┴───┴───┴─────┴────────────┘
  272.                     :                                   :
  273.                     ┌───┬────┬───┬───┬─────┬────────────┐ ┌─────┐
  274.                     │ ? │ Nr │ T │ ? │ NaL │ .. Name .. │ │ CHK │
  275.                     └───┴────┴───┴───┴─────┴────────────┘ └─────┘
  276.  
  277. In dem ersten mit ? markierten Feld (BYTE) steht meißt 02
  278. In den zweiten mit ? markierten Feld (BYTE) steht meißt 00
  279.  
  280. Nr (Byte) beinhaltet eine laufende Nummer der EXTRN-Deklarationen  (anstei-
  281. gend von 00 bis FF).
  282.  
  283. T (Byte) gibt den Variablen-Typ an:   00 = CODE
  284.                                       01 = XDATA
  285.                                       02 = DATA
  286.                                       03 = IDATA
  287.                                       04 = BIT
  288.                                       05 = NUMBER
  289.  
  290. EXTRN-Deklarationen kommen in Absolut-Files nicht vor.
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.                                      5
  304.  
  305. ** PUBLIC-Deklarationen:
  306. ------------------------
  307.     ┌────┬────────┐ ┌────┬───┬──────┬───┬─────┬────────────┐
  308.     │ 16 │ Length │ │SNr │ T │ Wert │ ? │ NaL │ .. Name .. │
  309.     └────┴────────┘ └────┴───┴──────┴───┴─────┴────────────┘
  310.                     :                                      :
  311.                     ┌────┬───┬──────┬───┬─────┬────────────┐ ┌─────┐
  312.                     │SNr │ T │ Wert │ ? │ NaL │ .. Name .. │ │ CHK │
  313.                     └────┴───┴──────┴───┴─────┴────────────┘ └─────┘
  314.  
  315. In dem mit ? markierten Feld (BYTE) steht meißt 00
  316.  
  317. SNr (Byte) beinhaltet die Nummer des Segments in dem der PUBLIC zu deklara-
  318. rierende Wert steht (siehe Typ 0E).
  319.  
  320. T (Byte) gibt den Variablen-Typ an:     00 = CODE
  321.                                         01 = XDATA
  322.                                         02 = DATA
  323.                                         03 = IDATA
  324.                                         04 = BIT
  325.                                         05 = NUMBER
  326.  
  327. Der  Wert  ist  immer  als  WORD abgelegt,  auch wenn es sich um eine DATA-
  328. Adresse handelt.
  329.  
  330. PUBLIC-Deklarationen kommen in Absolut-Files nicht vor.
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337. ** Relocate-Information:
  338. ------------------------
  339. Dieser Record folgt unmittelbar einem Record in dem Sprünge in ein  reloca-
  340. teables Segment enthalten sind.
  341.     ┌────┬────────┐ ┌────────┬────┬────┬────┬────────┐
  342.     │ 08 │ Length │ │  QAdr  │ ?  │ X  │SNr │  ZAdr  │
  343.     └────┴────────┘ └────────┴────┴────┴────┴────────┘
  344.                     :                                :
  345.                     ┌────────┬────┬────┬────┬────────┐ ┌─────┐
  346.                     │  QAdr  │ ?  │ X  │SNr │  ZAdr  │ │ CHK │
  347.                     └────────┴────┴────┴────┴────────┘ └─────┘
  348.  
  349. X enthält den Wert 01,  wenn sich die Zieladresse in diesem Modul befindet.
  350. Dabei gilt:
  351.      ZAdr (WORD) definiert einen Offset im Ziel-Segment.
  352.      SNr enthält die Nummer des Ziel-Segments.
  353.      QAdr hält den Offset in diesem Segment, an den der Linker die absolute
  354.      Zieladresse eintragen soll. Dabei kann es sich um Adressen bzw. Werte
  355.      beliebigen Typs handeln.
  356.  
  357. X enthält den Wert 02, wenn sich die Zieladresse in einem anderen Modul be-
  358. findet.  Die Zieladresse ist dann extrn definiert  (siehe  Typ  18).  Dabei
  359. gilt:
  360.      SNr  hält  die Nummer der EXTRN-Deklaration im Record-Typ 18,  die die
  361.      Ziel-Adresse bezeichnet. Im Feld ZAdr steht hier meißt 0000.
  362.  
  363.  
  364.                                      6
  365.  
  366. In dem mit ? bezeichneten Feld steht meist
  367.        04   beim Typ CODE, XDATA, NUMBER (16 Bit)
  368.        01   beim Typ DATA, IDATA, NUMBER (8 Bit)
  369.        06   beim Typ BIT
  370.  
  371. Relocate-Informationen kommen in Absolut-Files nicht vor.
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380. Beim erweiterten OMF51 sind noch zusätzliche Record-Typen definiert:
  381. ====================================================================
  382.  
  383. Erweitertes OMF51 wird verwendet beim C51 Compiler, wenn das Controlwort
  384.  
  385.         OBVJECTEXTEND      im C-Sourcefile angegeben wude (#pragma OE)
  386.  
  387.  
  388.  
  389.  
  390. Typ 24      hierin wird offenbar der Name des Sourcefiles abgelegt. Diesen
  391.             Typ trägt schon der C51-Compiler ein. Der Linker übernimmt den
  392.             Record nur in den Absolut-File. In einem Absolut-File können so
  393.             mehrere Records vom Typ 24 enthalten sein.
  394.  
  395.         ┌────┬────────┬────┬────┬────┬────┬──────────────┬────┐
  396.         │ 24 │ Length │ ?  │ ?  │ ?  │NaL │  .. Name ..  │CHK │
  397.         └────┴────────┴────┴────┴────┴────┴──────────────┴────┘
  398.  
  399. In NaL steht die Länge des folgenden File-Namens (Byteanzahl).
  400.  
  401.  
  402.  
  403.  
  404.  
  405. Typ 22      diser Typ ersetzt Typ 12 bei den Symboldefinitionen und ist
  406.             ähnlich aufgebaut. Beim C51-Compiler sind offenbar die Funk-
  407.             tionen in Libary-Files nicht mit OBJECTEXTEND compiliert,
  408.             so daß Symbole aus dazugelinkten Libarys weiterhin mit Typ 12
  409.             definiert sind.
  410.  
  411.      dazu ist nebenbei noch zu bemerken,  daß vom  C51-Compiler  Funktionen
  412.      und globale Variablen PUBLIC deklariert werden.  Variablen, die inner-
  413.      halb von Funktionen definiert wurden,  erhalten kein  PUBLIC-Attribut.
  414.      Variablen, die innerhalb von Unterfunktionen (alle anderen außer main)
  415.      definiert wurden, werden außerdem vom Linker überlagert.
  416.  
  417. Typ 20      ???  hier werden offenbar Übergabeparameter für Funktionen
  418.                  definiert. ???
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.                                      7
  426.  
  427. Record-Typen beim Libary-Manager LIB51.EXE:
  428. ===========================================
  429. Der  Libary-Manager  LIB51.EXE  bindet alle Records eines Moduls (inclusive
  430. Start- und End-Record Typ 02  und  04)  in  der  Reihenfolge,  wie  sie  im
  431. Objekt-File stehen, in den Libary-File ein.
  432.  
  433. Am Beginn eines Libary-Files steht folgender Record:
  434.      ┌────┬────────┬────────┬────┬────┬────┬────┬────┐
  435.      │ 2C │ Length │ ModCnt │ ?  │ ?  │ ?  │ ?  │CHK │
  436.      └────┴────────┴────────┴────┴────┴────┴────┴────┘
  437.  
  438. ModCnt (WORD) hält die Anzahl der Module, die ADDed sind.
  439.  
  440. Nach diesem Libary-Start-Record folgen die einzelnen Module hintereinander.
  441. Hinter den Records der Module kommen noch folgende Records:
  442.  
  443.  
  444.  
  445. ** Modul-List:
  446. --------------
  447.      ┌────┬────────┐ ┌────┬──────────────┐
  448.      │ 28 │ Length │ │NaL │  .. Name ..  │
  449.      └────┴────────┘ └────┴──────────────┘
  450.                      :                   :
  451.                      ┌────┬──────────────┐ ┌────┐
  452.                      │NaL │  .. Name ..  │ │CHK │
  453.                      └────┴──────────────┘ └────┘
  454.  
  455. Hier werden sämtliche Modul-Namen aufgelistet (keine Zuordnung).
  456.  
  457.  
  458.  
  459. ** ????
  460. --------
  461.      ┌────┬────────┐ ┌────┬────┬────┬────┐
  462.      │ 26 │ Length │ │ ?  │ ?  │ ?  │ ?  │
  463.      └────┴────────┘ └────┴────┴────┴────┘
  464.                      :                   :
  465.                      ┌────┬────┬────┬────┐ ┌────┐
  466.                      │ ?  │ ?  │ ?  │ ?  │ │CHK │
  467.                      └────┴────┴────┴────┘ └────┘
  468.  
  469. Wahrscheinlich eine Liste der Offsetadressen der einzelnen Module innerhalb
  470. des Libary-Files (dieselbe Reihenfolge wie bei Typ 28 ?).
  471.  
  472.  
  473.  
  474. ** Public-List:
  475. ---------------
  476.      ┌────┬────────┐ ┌────┬──────────────┬────┐
  477.      │ 2A │ Length │ │NaL │  .. Name ..  │ ?  │
  478.      └────┴────────┘ └────┴──────────────┴────┘
  479.                      :                        :
  480.                      ┌────┬──────────────┬────┐ ┌────┐
  481.                      │NaL │  .. Name ..  │ ?  │ │CHK │
  482.                      └────┴──────────────┴────┘ └────┘
  483.  
  484. Liste alle Publics aus allen Modulen
  485.  
  486.                                      8
  487.